﻿/*********************************************************
 * 开发人员：小兵
 * 创建时间：2012-10-15 15:59:06
 * 描述说明：
 * 
 * 更改历史：
 * 
 * *******************************************************/
namespace Mozlite.Components
{
    using System;
    using System.Web;
    using System.Data;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    /// <summary>
    /// Trie算法节点。
    /// </summary>
    public class TrieNode
    {
        /// <summary>
        /// 获取或设置是否已经到结尾。
        /// </summary>
        public bool IsEnd { get; set; }
        /// <summary>
        /// 节点字典。
        /// </summary>
        private Dictionary<char, TrieNode> nodes;
        /// <summary>
        /// 初始化类<see cref="TrieNode"/>。
        /// </summary>
        public TrieNode()
        {
            nodes = new Dictionary<char, TrieNode>();
        }
        /// <summary>
        /// 尝试获取节点。
        /// </summary>
        /// <param name="c">字符关键字。</param>
        /// <param name="node">返回节点实例。</param>
        /// <returns>返回是否包含当前关键字节点。</returns>
        public bool TryGetValue(char c, out TrieNode node)
        {
            return nodes.TryGetValue(c, out node);
        }
        /// <summary>
        /// 添加实例并返回。
        /// </summary>
        /// <param name="c">字符关键字。</param>
        /// <returns>返回当前节点。</returns>
        public TrieNode Add(char c)
        {
            TrieNode subnode;
            if(!nodes.TryGetValue(c, out subnode))
            {
                subnode = new TrieNode();
                nodes.Add(c, subnode);
            }
            return subnode;
        }
    }
}
